#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

/**
标准输入输出流 （File *）
    FILE *stdin;   标准输入
    FILE *stdout;  标准输出
    FILE *stderr;  标准错误输出
标准输出输出流的文件描述符
    STDIN_FILENO    0  标准输入
    STDOUT_FILENO   1  标准输出
    STDERR_FILENO   2  标准错误输出
 */
int main(int argc, char const *argv[])
{
    //关闭标准输出，标准错误输出
    close(STDOUT_FILENO);
    close(STDERR_FILENO);
    //打开正常日志文件流（标准输出）
    open("normal.log", O_CREAT | O_WRONLY | O_APPEND, 0644);
    //打开错误日志文件流（标准错误输出）
    open("error.log", O_CREAT | O_WRONLY | O_APPEND, 0644);

    
    //使用stdin 读取标准输入
    char input_buf[100];
    fgets(input_buf, sizeof(input_buf), stdin);
    printf("使用stdin读取输入 input_buf: %s", input_buf);
    //使用stdout 显示标准输出
    fputs("使用stdout显示输出 \n", stdout);
    //使用stderr 显示标准错误输出
    fputs("使用stderr显示错误输出 \n", stderr);

    //使用STDIN_FILENO 读取标准输入
    char input_buf2[100];
    int read_len = read(STDIN_FILENO, input_buf2, sizeof(input_buf2));
    printf("使用STDIN_FILENO读取输入 input_buf2: %.*s",read_len, input_buf2);
    //使用STDOUT_FILENO 显示标准输出
    write(STDOUT_FILENO, "使用STDOUT_FILENO显示输出 \n", strlen("使用STDOUT_FILENO显示输出 \n"));

    //使用STDERR_FILENO 显示标准错误输出
    write(STDERR_FILENO, "使用STDERR_FILENO显示错误输出 \n", strlen("使用STDERR_FILENO显示错误输出 \n"));
    
    return 0;
}
